Pandas建立在NumPy之上,提供了专为结构化数据处理设计的高级工具。
| 对比维度 | Pandas | Excel |
|---|---|---|
| 数据量 | 几乎无限制 | 约100万行 |
| 可重复性 | 代码可重现 | 操作难以追踪 |
| 自动化 | 可构建流水线 | 需手动操作 |
| 复杂计算 | 分组、聚合、变换 | 功能有限 |
| 时间序列 | 专门优化 | 基础支持 |
Series是Pandas的一维数据结构,类似NumPy数组但带标签索引。
语法:pd.Series(data, index=index, dtype=dtype, name=name)
中国卫星 -0.0035
中国软件 -0.0338
中国银行 0.0058
上汽集团 -0.0298
dtype: float64
list_may:存储四只股票的涨跌幅数据name:存储股票名称,用作索引标签pd.Series(data, index=...):创建带标签的一维数组索引的意义:
中国软件涨跌幅: -0.0338
第一个元素: -0.0035
前两个元素:
中国卫星 -0.0035
中国软件 -0.0338
Name: 涨跌幅, dtype: float64
负收益股票:
中国卫星 -0.0035
中国软件 -0.0338
上汽集团 -0.0298
Name: 涨跌幅, dtype: float64
统计摘要:
count 4.000000
mean -0.015325
std 0.019467
min -0.033800
25% -0.030800
50% -0.016650
75% -0.001175
max 0.005800
Name: 涨跌幅, dtype: float64
涨跌幅翻倍:
中国卫星 -0.0070
中国软件 -0.0676
中国银行 0.0116
上汽集团 -0.0596
Name: 涨跌幅, dtype: float64
按值排序(升序):
中国软件 -0.0338
上汽集团 -0.0298
中国卫星 -0.0035
中国银行 0.0058
Name: 涨跌幅, dtype: float64
按值排序(降序):
中国银行 0.0058
中国卫星 -0.0035
上汽集团 -0.0298
中国软件 -0.0338
Name: 涨跌幅, dtype: float64
| 访问方式 | 语法 | 说明 | 示例 |
|---|---|---|---|
| 标签索引 | s['label'] |
使用索引名 | s['中国卫星'] |
| 位置索引 | s[0] |
使用整数位置 | s[0] |
| 标签切片 | s['a':'c'] |
包含两端 | s['A':'C'] |
| 位置切片 | s[0:2] |
不包含末端 | s[0:2] |
易混淆点:标签切片包含末端,位置切片不包含!
DataFrame是Pandas的二维数据结构,类似Excel表格或SQL表。
语法:pd.DataFrame(data, index=index, columns=columns)
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#任务二:创建股票涨跌幅DataFrame
import pandas as pd
data={ # 定义data字典,开始构建键值映射
'中国卫星':[-0.0351,0.0172,-0.0035,-0.0246,0.0394], # "中国卫星"的数据序列
'中国软件':[-0.0139,0.0243,-0.0338,0.0146,0.0001], # "中国软件"的数据序列
'中国银行':[-0.0139,0.0243,-0.0338,0.0146,0.0001], # "中国银行"的数据序列
'上汽集团':[0.0212,0.0021,-0.0298,-0.0027,-0.0143] # "上汽集团"的数据序列
} # 数据结构定义结束
index=['20200525','20200526','20200527','20200528','20200529'] # 定义列表index
df=pd.DataFrame(data,index) # 创建数据框df
print(df) # 输出数据框数据 中国卫星 中国软件 中国银行 上汽集团
20200525 -0.0351 -0.0139 -0.0139 0.0212
20200526 0.0172 0.0243 0.0243 0.0021
20200527 -0.0035 -0.0338 -0.0338 -0.0298
20200528 -0.0246 0.0146 0.0146 -0.0027
20200529 0.0394 0.0001 0.0001 -0.0143
data字典:键为列名(股票名称),值为数据列表(涨跌幅)index列表:指定行标签(交易日期)pd.DataFrame(data, index):从字典创建DataFrame行索引的选择:
code name price
0 600519.SH 贵州茅台 1850.0
1 000858.SZ 五粮液 220.5
2 600036.SH 招商银行 45.2
A B C
row1 -0.923488 -0.516186 1.072817
row2 0.944275 1.348396 -0.643253
row3 0.836565 1.770071 -0.093332
row4 -0.789220 -1.067171 0.842535
row5 0.453361 0.911048 -0.314768
data = {
'中国卫星': [-0.0351, 0.0172, -0.0035, -0.0246, 0.0394],
'中国软件': [-0.0139, 0.0243, -0.0338, 0.0146, 0.0001],
'中国银行': [-0.0139, 0.0243, -0.0338, 0.0146, 0.0001],
'上汽集团': [0.0212, 0.0021, -0.0298, -0.0027, -0.0143]
}
index = ['20200525', '20200526', '20200527', '20200528', '20200529']
df = pd.DataFrame(data, index=index)
# 方法1:点号访问(列名无空格时可用)
print('点号访问:')
print(df.中国卫星.head(3))
# 方法2:方括号访问(通用方法,推荐)
print('\n方括号访问:')
print(df['中国软件'].head(3))
# 方法3:同时访问多列
print('\n多列访问:')
print(df[['中国卫星', '中国软件']].head(3))点号访问:
20200525 -0.0351
20200526 0.0172
20200527 -0.0035
Name: 中国卫星, dtype: float64
方括号访问:
20200525 -0.0139
20200526 0.0243
20200527 -0.0338
Name: 中国软件, dtype: float64
多列访问:
中国卫星 中国软件
20200525 -0.0351 -0.0139
20200526 0.0172 0.0243
20200527 -0.0035 -0.0338
loc访问单行:
中国卫星 0.0172
中国软件 0.0243
中国银行 0.0243
上汽集团 0.0021
Name: 20200526, dtype: float64
loc访问多行:
中国卫星 中国软件 中国银行 上汽集团
20200526 0.0172 0.0243 0.0243 0.0021
20200527 -0.0035 -0.0338 -0.0338 -0.0298
iloc访问第1行:
中国卫星 -0.0351
中国软件 -0.0139
中国银行 -0.0139
上汽集团 0.0212
Name: 20200525, dtype: float64
iloc访问前2行:
中国卫星 中国软件 中国银行 上汽集团
20200525 -0.0351 -0.0139 -0.0139 0.0212
20200526 0.0172 0.0243 0.0243 0.0021
形状: (5, 4)
数据类型:
中国卫星 float64
中国软件 float64
中国银行 float64
上汽集团 float64
dtype: object
前3行:
中国卫星 中国软件 中国银行 上汽集团
20200525 -0.0351 -0.0139 -0.0139 0.0212
20200526 0.0172 0.0243 0.0243 0.0021
20200527 -0.0035 -0.0338 -0.0338 -0.0298
中国卫星 中国软件 中国银行 上汽集团
count 5.000000 5.000000 5.000000 5.000000
mean -0.001320 -0.001740 -0.001740 -0.004700
std 0.030368 0.023044 0.023044 0.018995
min -0.035100 -0.033800 -0.033800 -0.029800
25% -0.024600 -0.013900 -0.013900 -0.014300
50% -0.003500 0.000100 0.000100 -0.002700
75% 0.017200 0.014600 0.014600 0.002100
max 0.039400 0.024300 0.024300 0.021200
转置前形状: (5, 4)
转置后:
20200525 20200526 20200527 20200528 20200529
中国卫星 -0.0351 0.0172 -0.0035 -0.0246 0.0394
中国软件 -0.0139 0.0243 -0.0338 0.0146 0.0001
中国银行 -0.0139 0.0243 -0.0338 0.0146 0.0001
上汽集团 0.0212 0.0021 -0.0298 -0.0027 -0.0143
转置后形状: (4, 5)
中国卫星>0 且 中国软件>0:
中国卫星 中国软件 中国银行 上汽集团
20200526 0.0172 0.0243 0.0243 0.0021
20200529 0.0394 0.0001 0.0001 -0.0143
query方法筛选:
中国卫星 中国软件 中国银行 上汽集团
20200526 0.0172 0.0243 0.0243 0.0021
20200529 0.0394 0.0001 0.0001 -0.0143
Series 1: [10 20 30] 索引: ['a', 'b', 'c']
Series 2: [ 5 15 25] 索引: ['a', 'b', 'd']
加法(自动对齐):
a 15.0
b 35.0
c NaN
d NaN
dtype: float64
核心机制:只有相同索引的值才会运算,不同的产生NaN。
DataFrame加法:
A B
0 11 44
1 22 55
2 33 66
DataFrame乘以标量10:
A B
0 10 40
1 20 50
2 30 60
data = {
'中国卫星': [-0.0351, 0.0172, -0.0035, -0.0246, 0.0394],
'中国软件': [-0.0139, 0.0243, -0.0338, 0.0146, 0.0001],
'中国银行': [-0.0139, 0.0243, -0.0338, 0.0146, 0.0001],
'上汽集团': [0.0212, 0.0021, -0.0298, -0.0027, -0.0143]
}
index = ['20200525', '20200526', '20200527', '20200528', '20200529']
df = pd.DataFrame(data, index=index)
# 每只股票的平均涨跌幅
print('均值(axis=0, 按列):')
print(df.mean())
# 每只股票的波动率
print('\n标准差:')
print(df.std())均值(axis=0, 按列):
中国卫星 -0.00132
中国软件 -0.00174
中国银行 -0.00174
上汽集团 -0.00470
dtype: float64
标准差:
中国卫星 0.030368
中国软件 0.023044
中国银行 0.023044
上汽集团 0.018995
dtype: float64
axis=0(默认):沿列方向计算 → 每只股票的统计值axis=1:沿行方向计算 → 每个交易日的统计值累积收益率:
中国卫星 中国软件 中国银行 上汽集团
20200525 -0.035100 -0.013900 -0.013900 0.021200
20200526 -0.018504 0.010062 0.010062 0.023345
20200527 -0.021939 -0.024078 -0.024078 -0.007151
20200528 -0.045999 -0.009829 -0.009829 -0.009832
20200529 -0.008412 -0.009730 -0.009730 -0.023991
计算步骤:
1 + df:涨跌幅 → 收益率因子(如 -0.01 → 0.99).cumprod():计算累积乘积- 1:因子 → 累积收益率原始数据:
A B C
0 1.0 5.0 9
1 2.0 NaN 10
2 NaN NaN 11
3 4.0 8.0 12
缺失值位置(True=缺失):
A B C
0 False False False
1 False True False
2 True True False
3 False False False
用0填充:
A B C
0 1.0 5.0 9
1 2.0 0.0 10
2 0.0 0.0 11
3 4.0 8.0 12
前向填充:
A B C
0 1.0 5.0 9
1 2.0 5.0 10
2 2.0 5.0 11
3 4.0 8.0 12
用均值填充:
A B C
0 1.000000 5.0 9
1 2.000000 6.5 10
2 2.333333 6.5 11
3 4.000000 8.0 12
| 概念 | 说明 | 关键方法 |
|---|---|---|
| Series | 一维带标签数组 | pd.Series() |
| DataFrame | 二维表格数据 | pd.DataFrame() |
| 索引访问 | 标签/位置 | loc / iloc |
| 条件筛选 | 布尔索引 | df[条件] / query() |
| 统计函数 | 按行/按列 | mean() / std() |
| 缺失值 | 检测/删除/填充 | isnull() / dropna() / fillna() |
[商业大数据分析与应用]